#ifndef ResizeHandleH
#define ResizeHandleH
//============================================================================
/// \file   ResizeHandle.h
/// \author Uwe Kindler
/// \date   24.10.2022
/// \brief  Declaration of CResizeHandle class
//============================================================================

//============================================================================
//                                   INCLUDES
//============================================================================
#include "ads_globals.h"
#include <QFrame>

namespace ads
{
struct ResizeHandlePrivate;

/**
 * 调整大小的手柄，用于调整其父窗口部件的大小
 */
class ADS_EXPORT CResizeHandle : public QFrame
{
    Q_OBJECT
    Q_DISABLE_COPY(CResizeHandle)
    Q_PROPERTY(bool opaqueResize READ opaqueResize WRITE setOpaqueResize)

private:
    ResizeHandlePrivate* d; ///< 私有数据 (pimpl)
    friend struct ResizeHandlePrivate;

protected:
    void mouseMoveEvent(QMouseEvent *) override;
    void mousePressEvent(QMouseEvent *) override;
    void mouseReleaseEvent(QMouseEvent *) override;

public:
    using Super = QFrame;

    /**
     * 默认构造函数
     */
    CResizeHandle(Qt::Edge HandlePosition, QWidget* parent);

    /**
     * 虚析构函数
     */
    virtual ~CResizeHandle();

    /**
     * 设置手柄位置
     */
    void setHandlePosition(Qt::Edge HandlePosition);

    /**
     * 返回手柄位置
     */
    Qt::Edge handlePostion() const;

    /**
     * 返回此调整大小手柄的方向
     */
    Qt::Orientation orientation() const;

    /**
     * 返回大小提示
     */
    QSize sizeHint() const override;

    /**
     * 返回是否正在调整大小
     */
    bool isResizing() const;

    /**
     * 设置要调整大小的窗口部件的最小大小。
     * 调整大小手柄不会将目标窗口部件调整为小于此值的大小
     */
    void setMinResizeSize(int MinSize);

    /**
     * 设置要调整大小的窗口部件的最大大小。
     * 调整大小手柄不会将目标窗口部件调整为大于此值的大小
     */
    void setMaxResizeSize(int MaxSize);

    /**
     * 启用/禁用不透明调整大小
     */
    void setOpaqueResize(bool opaque = true);

    /**
     * 如果在交互移动调整大小手柄时以动态方式（不透明地）调整窗口部件大小，则返回true。
     * 否则返回false。
     */
    bool opaqueResize() const;
}; // 类名} // namespace ads
//-----------------------------------------------------------------------------
#endif // ResizeHandleH
